/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package canteen.sys.model.generic;

import canteen.sys.model.entity.repository.AuthorDAO;
import canteen.sys.model.entity.repository.ItemDAO;
import canteen.sys.model.entity.repository.LanguageDAO;
import canteen.sys.model.entity.repository.OwnerDAO;
import canteen.sys.model.entity.repository.OwnerItemDAO;
import canteen.sys.model.entity.repository.StatusOfUseDAO;
import canteen.sys.model.entity.repository.StoreDAO;
import canteen.sys.model.entity.repository.TypeOfRegulationDAO;
import canteen.sys.model.entity.repository.TypeOfUseDAO;

/**
 *
 * @author TNT
 */
public abstract class DAOFactory {

    /**
     * Creates a standalone DAOFactory that returns unmanaged DAO beans for use
     * in any environment Hibernate has been configured for. Uses
     * HibernateUtil/SessionFactory and Hibernate context propagation
     * (CurrentSessionContext), thread-bound or transaction-bound, and
     * transaction scoped.
     */
    public static final Class HIBERNATE = canteen.sys.model.generic.HibernateDAOFactory.class;

    /**
     * Factory method for instantiation of concrete factories.
     */
    public static DAOFactory instance(Class factory) {
        try {
            return (DAOFactory) factory.newInstance();
        } catch (InstantiationException | IllegalAccessException ex) {
            throw new RuntimeException("Couldn't create DAOFactory: " + factory);
        }
    }
    // Add your DAO interfaces here

//    public abstract BillDetailDAO getBillDetailDAO();
//
//    public abstract BillMasterDAO getBillMasterDAO();
    public abstract TypeOfUseDAO getTypeOfUseDAO();

    public abstract AuthorDAO getAuthorDAO();

    public abstract ItemDAO getItemDAO();

    public abstract LanguageDAO getLanguageDAO();

    public abstract OwnerDAO getOwnerDAO();

    public abstract OwnerItemDAO getOwnerItemDAO();

    public abstract StatusOfUseDAO getStatusOfUserDAO();

    public abstract StoreDAO getStoreDAO();

    public abstract TypeOfRegulationDAO getTypeOfRegulationDAO();
}
